import axios from 'axios';
import { ElMessage } from 'element-plus';

// 错误消息常量对象
type HttpStatusCode = 400 | 401 | 403 | 404 | 405 | 408 | 500 | 501 | 502 | 503 | 504 | 505;

const ErrorMessage:Record<HttpStatusCode, string>  = {
    400: '错误的请求',
    401: '未授权，请重新登录',
    403: '拒绝访问',
    404: '请求错误,未找到该资源',
    405: '请求方法未允许',
    408: '请求超时',
    500: '服务器端出错',
    501: '网络未实现',
    502: '网络错误',
    503: '服务不可用',
    504: '网络超时',
    505: 'http版本不支持该请求',
};

// 通过对象映射错误代码和消息
const errorCodeType = function (code: HttpStatusCode): string {
    return ErrorMessage[code] || '未知错误';
};
console.log(import.meta.env.VITE_API_BASEURL)
// 配置新建一个 axios 实例
const service = axios.create({
    baseURL: import.meta.env.VITE_API_BASEURL,
    timeout: 50000,
    headers: { 'Content-Type': 'application/json' }
});

// 添加请求拦截器
service.interceptors.request.use(
    (config) => {
        // 在发送请求之前做些什么，例如添加 token
        // 请确保以下代码根据实际需求进行了适当实现
        // if (Session.get('token')) {
        //     config.headers!['Authorization'] = `${Session.get('token')}`;
        // }
        console.log(config)
        return config;
    },
    (error) => {
        // 对请求错误做些什么
        // 根据需要对错误进行更详细的处理
        return Promise.reject(error);
    }
);

// 添加响应拦截器
service.interceptors.response.use(
    (response) => {
        console.log(response);
        // 对响应数据做点什么
        const res = response.data;
        return res;
        // 根据实际需求，可能需要对响应码进行处理
    },
    (error) => {
        // 根据不同的错误类型显示不同的消息
        let errorMessage = '未知错误';
        if (error.response) {
            switch (error.response.status) {
                case 400:
                case 401:
                // ...其他处理逻辑
                default:
                    errorMessage = errorCodeType(error.response.status);
            }
        } else if (error.message.indexOf('timeout') !== -1) {
            errorMessage = '网络超时';
        } else {
            errorMessage = '网络连接错误';
        }
        ElMessage.error(errorMessage);
        return Promise.reject(error);
    }
);

// 导出 axios 实例
export default service;